import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
const { resolve } = require('path')

// https://vitejs.dev/config/
export default defineConfig({
	plugins: [vue()], // 配置需要使⽤的插件列表，这⾥将vue添加进去

	// 强制预构建插件包
	optimizeDeps: {
		// include: ['axios'],
	},
	//静态资源服务的⽂件夹
	publicDir: "public",
	base: './',
	//静态资源处理
	assetsInclude: "",
	//控制台输出的级别 info 、warn、error、silent
	logLevel: "info",
	// 设为false 可以避免 vite 清屏⽽错过在终端中打印某些关键信息
	clearScreen: true,
	resolve: {
		alias: [//配置别名
			{ find: '@', replacement: resolve(__dirname, 'src') }
		],
		// 情景导出 package.json 配置中的exports字段
		conditions: [],
		// 导⼊时想要省略的扩展名列表
		// 不建议使⽤ .vue 影响IDE和类型⽀持
		extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json']
	},
	// css
	css: {
		// 配置 css modules 的⾏为
		modules: {},
		// postCss 配置
		postcss: {
		},
		//指定传递给 css 预处理器的选项

		preprocessorOptions: {
			//全局样式文件
			scss: {
				additionalData: '@import "@/assets/scss/globel.scss";'
			}
		}
	},
	json: {
		//是否⽀持从 .json ⽂件中进⾏按名导⼊
		namedExports: true,
		//若设置为 true 导⼊的json会被转为 export default JSON.parse("..") 会⽐转译成对象字⾯量性能更好
		stringify: false
	},
	//继承⾃ esbuild 转换选项，最常见的⽤例是⾃定义 JSX
	esbuild: {
		jsxFactory: "h",
		jsxFragment: "Fragment",
		jsxInject: `import Vue from 'vue'`
	},
	//本地运⾏配置，以及反向代理配置
	server: {
		host: "localhost",
		https: false,//是否启⽤ http 2
		cors: true,//为开发服务器配置 CORS , 默认启⽤并允许任何源
		open: false,//服务启动时⾃动在浏览器中打开应⽤
		port: "9000",
		strictPort: false, //设为true时端⼝被占⽤则直接退出，不会尝试下⼀个可⽤端⼝
		force: true,//是否强制依赖预构建
		hmr: true,//禁⽤或配置 HMR 连接 热更新
		// 传递给 chockidar 的⽂件系统监视器选项
		watch: {
			ignored: ["!**/node_modules/your-package-name/**"]
		},
		// 反向代理配置
		proxy: {
			'/api': {
				target: "https://xxxx.com/",
				changeOrigin: true,
				rewrite: (path) => path.replace(/^\/api/, '')
			}
		}
	},
	//打包配置
	build: {
		//浏览器兼容性  "esnext"|"modules"
		target: "modules",
		//指定输出路径
		outDir: "dist",
		//⽣成静态资源的存放路径
		assetsDir: "assets",
		//⼩于此阈值的导⼊或引⽤资源将内联为 base64 编码，以避免额外的 http 请求。设置为 0 可以完全禁⽤此项
		assetsInlineLimit: 4096,
		//启⽤/禁⽤ CSS 代码拆分
		cssCodeSplit: true,
		//构建后是否⽣成 source map ⽂件
		sourcemap: false,
		//⾃定义底层的 Rollup 打包配置
		rollupOptions: {
		},
		//@rollup/plugin-commonjs 插件的选项
		commonjsOptions: {
		},
		//构建的库
		// lib: {
		// },
		//当设置为 true，构建后将会⽣成 manifest.json ⽂件
		manifest: false,
		// 设置为 false 可以禁⽤最⼩化混淆，
		// 或是⽤来指定使⽤哪种混淆器
		// boolean | 'terser' | 'esbuild'
		minify: "terser", //terser 构建后⽂件体积更⼩
		//传递给 Terser 的更多 minify 选项。
		terserOptions: {
		},
		//设置为 false 来禁⽤将构建后的⽂件写⼊磁盘
		write: true,
		//默认情况下，若 outDir 在 root ⽬录下，则 Vite 会在构建时清空该⽬录。
		emptyOutDir: true,
		//启⽤/禁⽤ brotli 压缩⼤⼩报告
		brotliSize: true,
		//chunk ⼤⼩警告的限制
		chunkSizeWarningLimit: 500
	},
	ssr: {
		// 列出的是要为 SSR 强制外部化的依赖
		external: [],
		//列出的是防⽌被 SSR 外部化依赖项
		noExternal: [
		]
	}
})
